﻿ //应用程序

//为了让目录结构保持统一清晰，所以把所有的HTML文件都放到views(视图)目录中，
//为了方便的统一处理这些静态资源，所以我规定把所有的静态资源都存放在public目录中
var http=require('http')
var fs=require('fs')
var url=require('url')
var template=require('art-template')

var comments=[
    {
        name:'zhangsan',
        message:'good day! 1',
        datetime:'2020-7-26'
    },
    {
        name:'zhangsan',
        message:'good day! 2',
        datetime:'2020-7-26'
    },
    {
        name:'zhangsan',
        message:'good day! 3',
        datetime:'2020-7-26'
    },
    {
        name:'zhangsan',
        message:'good day! 4',
        datetime:'2020-7-26'
    },
    {
        name:'zhangsan',
        message:'good day! 5',
        datetime:'2020-7-26'
    },
]

//  /pinglun?message=sdfsdfdfgdg
//对于这种表单提交的请求路径，由于其中具有用户动态填写的内容
//所以你不可能通过判断url路径来处理这个请求
//
//结论：对于我们来讲其实只需要判定，如果你的请求路径是 /pinglun 的时候，那我就以为你提交的表单请求过来的

http.createServer(function(req,res){
    //使用url.parse方法将路径解析为一个方便操作的对象，第二个参数为true表示将查询字符串转为一个对象
    var parseObj=url.parse(req.url,true)
   // var parseObj=new URL(req.url,'http:///./.0.1:3000/')
    
    //单独获取不包含查询字符串的路径部分（该路径不包含？之后的内容）
    var pathname=parseObj.pathname
    
    if(pathname==='/'){
        fs.readFile('./views/index.html',function(err,data){
            if(err){
                return res.end('404 Not Found.')
            }
            //render渲染页面（数据）
            var htmlStr=template.render(data.toString(),{
                comments:comments
            })
            res.end(htmlStr)
        })
    }else if(pathname.indexOf('/public/')===0){
        //  /public/css/main.js-----/public/js/mian.js----/public/lib/jquery.js
        //统一处理：
        //  如果请求路径是以/public/ 开头的，则认为获取public
        //  所以就自接可以把请求路径当作文件路劲来直接进行读取
        //console.log(url)   ///public/js/main.js
        fs.readFile('.'+ pathname,function(err, data){
            if(err){
                return res.end('404 Not Found.')
            }
            res.end(data)
        })
    }else if(pathname==='/post'){
        fs.readFile('./views/post.html',function(err,data){
          if(err) {return res.end('404 not found...')}
          res.end(data)
        })
    }else if(pathname==='/pinglun'){
        //注意:这个时候无论、/pinglun？xxx之后是什么，都不用担心了。因为我的pathname是不包含？之后的那个路径
        //一次请求对应一次响应，响应结束这次请求也就结束了
       //res.end(JSON.stringify(parseObj.query))
       
        //我们已经使用url模块的parse方法把请求的路径中查询字符串给解析成一个对象了
        //所以接下来要做的就是：
        //    1.获取表单提交的数据parseObj.query
        //    2.生成当前日期添加到数据对象中，然后存储到数组中
        //    3.让用户重定向跳转到首页 /
        //      当用户重新请求 / 的时候，我数组中的数据已经发生变化了，所以用户看到的数据也就变了
        //--------[Object: null prototype] { message: '888888888888888888' }
        var comment=parseObj.query
        comment.datetime='2020-7-26 15:00:00'
    //console.log(comment)
        
        comment=JSON.stringify(parseObj.query)  // '{"message":"阿斯顿发撒旦法","datetime":"2020-7-26 15:00:00"}'
    // console.log('*******'+comment)
        
         comment=JSON.parse(comment)  // {"message":"阿斯顿发撒旦法","datetime":"2020-7-26 15:00:00"}
          comments.unshift(comment)
    //console.log(comments)
       


        
        //  //服务端这个时候已经把数据存储好了，接下来就让用户重新请求 / 首页，就可以看到最小的留言信息了

        //  //如何通过服务器让客户端重定向？
        //  //    1.状态码设置为302临时定向
        //  //        statusCode
        //  //    2.在响应头中通过Location告诉客户端往哪重定向
        //  //        setHeader
        //  // 如果客户端发现收到服务器的响应的状态码是302就会自动去响应头中找Location,然后对该地址发起新的请求
        //  //所以就能看到客户端自动跳转了
         res.statusCode=302
         res.setHeader('Location','/')
         res.end()
    }else{
        //其他的都处理为404找不到
        fs.readFile('./views/404.html',function(err,data){
            if(err){
                return res.end('404 not found...')
            }
            res.end(data)
        })
    }
}).listen(3000,function(){
    console.log('runing...')
})